<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script src="../../2.jq/jquery/jquery-1.12.4.min.js"></script>
    <script>
       /*  console.dir(Promise);
        let promise  = new Promise((resolve,reject)=>{
            // 初始化状态
            if(true){
                resolve('成功状态！！');
            }else{
                reject('失败状态！！');
            }
        })
        console.log(promise); */
        /* promise.then((data)=>{
            console.log(data);
        })
        promise.catch(err=>{
            console.log(err);
        })
        promise.finally(()=>{
            console.log('不依赖状态，最终都会执行')
        }) */
       /*  promise.then(data=>{
            console.log(data)
        }).finally(()=>{
            console.log('链式调用')
        }) */


        /* function fun(hei){
            hei();
        }
        function foo(){
            console.log('sunwei');
        }
        // 函数调用
        fun(foo); */

        // Promise.resolve() 可以将一个普通的对象变为promise对象，并且默认就是promise的成功状态
        let obj = {
            name:'sunwei'
        }
        let p1 = Promise.resolve(obj);
        console.log(p1);
        p1.then(data=>{
            console.log(data);
        })
        let p2 = Promise.resolve('sunwei');
        console.log(p2);
        p2.then(data=>{
            console.log(data);
        })
        // Promise.reject()  可以将普通对象转换为promise对象，并且该promise对象是失败状态
        /* let p3 = Promise.reject('失败了');
        p3.catch(err=>{
            console.log(err);
        })
        let p4 = Promise.reject({content:'失败了'});
        p4.catch(err=>{
            console.log(err);
        }) */

        // Promise.all() 可以把多个promise对象转变为一个promise对象
        // 当所有的promise对象都是成功，新形成的promise对象就是成功状态
        // 当有一个是失败的 新形成的就是失败状态，返回的值就是第一个出现失败的值
      /*   let p5 = Promise.all([p1,p2,p4,p3]);
        console.log(p5);
        p5.then(data=>{
            console.log(data);
        })
        p5.catch(err=>{
            console.log(err);
        }) */

        let p7 = new Promise((resolve,reject)=>{
            $.ajax({
                method:'get',
                url:'http://localhost:3000/search_info',
                success:(data)=>{
                    console.log(data);
                    resolve(data);
                },
                error:err=>{
                    console.log(err);
                    reject(err);
                }
            })
        })
        // Promise.race()可以接收一个数组作为参数，形成一个新的promise对象，执行结果是，谁执行的快，最先得到结果，新形成的promise的结果是谁
        let p6 = Promise.race([p7,p2,p1]);
        console.log(p6);
        p6.then(data=>{
            console.log(data);
        })
    </script>
</body>
</html>